/* 引入ajax请求 */
import {
    getAddToCart,
    getCartList,
    getChangeOneChecked,
    getDeleteOneCart,
    getChangeAllChecked,
    getDeleteAllCart
} from "../../api"

const state = {
    shopCartList: []
}

const actions = {
    /* 
       axios返回的是一个promise对象
       一般我们是用async和await处理promise返回的结果
       async是一个异步函数,在async函数操作promise的
           如果使用async返回一个数据,两种形态
               return 
                   非promise
                       那return返回的结果一定是成功的promise,如果其中有异常出现,那么返回的就是
                       失败的promise,失败的原因就是异常出现的原因
                   promsie
                       那return返回的是结果就是一个promise对象,如果返回的数据是一个成功的promise
                       那么返回的结果一定是一个成功的promise,如果返回的是一个失败的promise,那么
                       返回的结果是一个失败的Promise,失败的原因是promise原因
   */
    /* 添加购物车 成功页面 (修改购物车商品数量)*/
    async reqAddToCart({ commit }, { skuId, skuNum }) {
        const result = await getAddToCart({ skuId, skuNum });
        if (result.code === 200) {
            return "ok"
        } else {
            return Promise.reject("failed!!")
        }
    },
    /* 获取购物车列表 */
    async reqShopCartList({ commit }) {
        const result = await getCartList();
        if (result.code === 200) {
            commit("RECEIVE_SHOPCARTLIST", result.data)
        }
    },
    /* 删除单个商品 */
    async reqDeleteOneCart({ commit }, skuId) {
        const result = await getDeleteOneCart(skuId);
        if (result.code === 200) {
            return "ok"
        } else {
            return Promise.reject("failed！！")
        }
    },
    /* 修改单个商品选中状态 */
    async reqChangeOneChecked({ commit }, { skuID, isChecked }) {
        const result = await getChangeOneChecked({ skuID, isChecked });
        if (result.code === 200) {
            return "ok"
        } else {
            return Promise.reject("failed!!!")
        }
    },
    /* 全选反选 */
    async reqChangeAllChecked({ commit }, { isChecked, skuIdList }) {
        const result = await getChangeAllChecked({ isChecked, skuIdList });
        if (result.code === 200) {
            return "ok";
        } else {
            return Promise.reject("failed！！！");
        }
    },
    /* 批量删除购物车选中商品 */
    async reqDeleteAllCart({ commit }, skuIdList) {
        const result = await getDeleteAllCart(skuIdList);
        if (result.code === 200) {
            return "ojbk"
        } else {
            return Promise.reject("failed!!!")
        }
    }
}
const mutations = {
    RECEIVE_SHOPCARTLIST(state, value) {
        state.shopCartList = value
    }
}
const getters = {}

export default {
    state,
    actions,
    mutations,
    getters
}